package 晚间作业0418_scala

import scala.io.StdIn

object Scala_01 {
  def main(args: Array[String]): Unit = {
    q01_02(6)
    q03(2022)
    println(q04("20:39:40"))
    println(q04("20:39:59"))
    println(q04("20:59:59"))
    println(q04("23:59:59"))
    q05
    q06
    q07(5)
    println(q08(12345))
    println(q08(12340))
    println(q09(2, 5))
    q10(5)
  }

  /**
   * 1.输⼊两个数，按从⼩到⼤排序后输出
   * 2.输⼊三个数(互不相同)，⽐较⼤⼩后升序输出（从⼩到⼤）
   */
  def q01_02(pNum: Int) = {
    val params = new Array[Int](pNum)
    for (i <- 1.to(pNum)) {
      println(s"请输入第${i}个数：")
      params(i-1) = StdIn.readInt()
    }
    // 冒泡排序
    var break = false
    for (i <- 0 until pNum if !break) {
      break = true
      for (j <- 0 until pNum - i - 1) {
        if (params(j+1) < params(j)) {
          val tmp = params(j + 1)
          params(j+1) = params(j)
          params(j) = tmp
          break = false
        }
      }
    }
    println(params.mkString("\t"))
  }

  /**
   * 3.输⼊⼀个年份，判断是否是闰年
   * @param year 年份
   * @return 是否是闰年
   */
  def q03(year: Int): Boolean = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0

  /**
   * 4.输⼊⼀个时间（只考虑时分秒），输出它的下⼀秒时间
   * @param time 时间，terminated by “:”
   * @return 下一秒时间
   */
  def q04(time: String): String = {
    val times: Array[String] = time.split(":")
    // 判断秒
    var next = times(2).toInt + 1
    if (next < 60) {
      // 小于60，直接输出
      times(2) = "%02d".format(next)
      return times.mkString(":")
    }
    // 秒大于60
    times(2) = "00"
    next = times(1).toInt + 1
    if (next < 60) {
      times(1) = "%02d".format(next)
      return times.mkString(":")
    }
    // 分大于60
    times(1) = "00"
    next = times(0).toInt + 1
    if (next < 24) {
      times(0) = "%02d".format(next)
      return times.mkString(":")
    }
    times(0) = "00"
    times.mkString(":")
  }

  /**
   * 5.输出1000以内所有的⽔仙花数，所谓⽔仙花数是指⼀个3位数，其各位数字⽴⽅和等于该数本身
   */
  def q05 = {
    for (i <- 100 to 999) {
      if (Math.pow(i % 10, 3) + Math.pow(i / 10 % 10, 3) + Math.pow(i / 100, 3) == i) {
        println(i)
      }
    }
  }

  /**
   * 6.打印输出乘法⼝诀表（直⻆三⻆形）。
   */
  def q06 = {
    for (i <- 1 to 9) {
      for(j <- 1 to i) {
        print(s"$i*$j=${i*j}\t")
      }
      println()
    }
  }

  /**
   * 7.在屏幕上输出以下内容
   * 12345
   * 1234
   * 123
   * 12
   * 1
   */
  def q07(lenOfHead: Int) = {
    for (i <- lenOfHead to 1 by (-1)) {
      for (j <- 1 to i) {
        print(j)
      }
      println()
    }
  }

  /**
   * 8.给定⼀个n位的整数，将该数位逆置。要求:输⼊是数字，打印的结果也要是⼀个数字。
   */
  def q08(param: Int): Int = {
    if (param < 10) { return param }
    var original = param
    var result = 0
    do {
      val tmp = original % 10
      result = result * 10 + tmp
      original /= 10
    } while (original % 10 != 0)
    result
  }

  /**
   * 9.求s=a+aa+aaa+aaaa+aa...a的值，其中a是⼀个数字（1-9之间）计算的数据的个数是5。
   */
  def q09(a:Int, limit: Int): Int = {
    var result = 0
    var aa = a
    for (_ <- 1 to limit) {
      result += aa
      aa = aa * 10 + a
    }
    result
  }

  /**
   * 10.输⼊⼀个数，打印下述图形。
   *      ABBBB
         AABBB
        AAABB
       AAAAB
      AAAAA
   */
  def q10(num: Int) = {
    for(i <- num to 1 by -1) {
      // 打印空格
      for (_ <- 1 to i) print(" ")
      // 打印字母
      for (j <- 5 to 1 by -1) {
        print(s"${if (j >= i) "A" else "B"}")
      }
      println()
    }
  }
}
